crystal

Inhaltsverzeichnis

1 Einführung 3 1.1 Was ist ”crystal“? . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2 Vorgeschichte . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.3 Das Konzept von ”crystal“ . . . . . . . . . . . . . . . . . . . 4

2 Übersetzen von ”crystal“ 6 2.1 Arbeiten mit dem Präprozessor . . . . . . . . . . . . . . . . . 6 2.2 Hinweise zu Compilern . . . . . . . . . . . . . . . . . . . . . . 8

2.2.1 Fitted Software Tools - Modula V 3.1 . . . . . . . . . 8 2.2.2 ana - Modula . . . . . . . . . . . . . . . . . . . . . . . 8 2.2.3 TopSpeed - Modula V 1.17 . . . . . . . . . . . . . . . 8 2.2.4 Hänisch - Modula . . . . . . . . . . . . . . . . . . . . 9 2.2.5 SPC - Modula . . . . . . . . . . . . . . . . . . . . . . 9 2.2.6 LPR - Modula . . . . . . . . . . . . . . . . . . . . . . 9 2.2.7 Modular Software - Modula . . . . . . . . . . . . . . . 10 2.2.8 FTL - Modula . . . . . . . . . . . . . . . . . . . . . . 10

2.3 Hinweise zu den verschiedenen GEM - Versionen . . . . . . . 11 2.3.1 ATARI - GEM . . . . . . . . . . . . . . . . . . . . . . 11 2.3.2 PC - GEM . . . . . . . . . . . . . . . . . . . . . . . . 11 2.3.3 X/GEM . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.3.4 X/GemOnX . . . . . . . . . . . . . . . . . . . . . . . . 12

2.4 ”crystal“ und M2POSIX . . . . . . . . . . . . . . . . . . . . . 13

3 Beschreibung der Moduln 14 3.1 Namensgebung . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.2 Das Modul PORTAB . . . . . . . . . . . . . . . . . . . . . . . 14 3.3 Das Modul pSTORAGE . . . . . . . . . . . . . . . . . . . . . 16 3.4 Das Modul RcMgr . . . . . . . . . . . . . . . . . . . . . . . . 16 3.5 Das Modul SetObject . . . . . . . . . . . . . . . . . . . . . . 16 3.6 Das Modul GetObject . . . . . . . . . . . . . . . . . . . . . . 16 3.7 Das Modul MenuTool . . . . . . . . . . . . . . . . . . . . . . 16 3.8 Das Modul FormTool . . . . . . . . . . . . . . . . . . . . . . . 16 3.9 Das Modul GrafTool . . . . . . . . . . . . . . . . . . . . . . . 17 3.10 Das Modul ObjcTool . . . . . . . . . . . . . . . . . . . . . . . 17 3.11 Das Modul RsrcTool . . . . . . . . . . . . . . . . . . . . . . . 17 3.12 Das Modul AESTool . . . . . . . . . . . . . . . . . . . . . . . 17 3.13 Das Modul ApplTool . . . . . . . . . . . . . . . . . . . . . . . 17 4 Liste der Modula - Compiler 18 5 Literatur 21

1 Einführung

1.1 Was ist ”crystal“?

”crystal“ ist der Versuch, für Modula-2 eine Standard - GEM - Bibliothek zu schaffen. ”crystal“

• berücksichtigt – ATARI-GEM 1.0, 1.2, 1.4, 3.x, 4.x

– MultiGEM, Mag!X

– GDOS, AMCGDOS, FSMGDOS, SpeedoGDOS, NVDI

– ABC-GEM 2.x,

– KAOS-GEM 1.42,

– PC-GEM 1.2, PC-GEM 2.x, GEM/3,

– X/GEM,

– X/GemOnX,

• fängt Unterschiede zwischen den einzelnen GEM - Versionen ab

• ist hochportabel

• ist vollständig angepaßt an TopSpeed - M2, TDI - M2, Megamax - M2, Hänisch - M2/ST, SPC - M2, LPR - M2

• ist teilweise angepaßt Logitech - M2, Software Developing System - M2, Fitted Software Tools - M2, Modular Software - M2, ana - M2/ST, FTL - M2

• bietet C - nahe Bezeichner, aber trotzdem kein Verzicht auf das Typenkonzept von Modula, d.h.

• bietet neben Konstanten auch Mengen, Aufzählungen, Unterbereiche, Prozedurtypen und Pointertypen, ”QUALIFIED REEXPORT“ von Typen und Konstanten, Typsynonyme

• besitzt einen effizienten AES-Aufruf für MC 680x0-Systeme (modifiziertes Seimet - Verfahren)

• ist frei kopierbar – der Quelltext liegt offen und kann an jedes geeignete Modula - System angepaßt werden

• bietet eine ständig wachsende Zahl zusätzlicher Moduln

1.2 Vorgeschichte

”crystal“ entstand aus der Situation, daß mit den meisten ATARI - Modula - Systemen zwar GEM - Programme erstellt werden konnten, jedoch jeder Hersteller seine eigene Art und Weise, GEM - Aufrufe zu tätigen, anbot. Es gab also keinen Standard, höchstens eine Art ”TDI - Standard“, da TDI wohl einer der ersten Modula - Compiler war, der für den GEM - Rechner ATARI ST verfügbar war. Man war sich einig, daß ein GEM - Standard aus der Taufe gehoben werden mußte. Ein Streit entbrannte über die Namensgebung und die Modulaufteilung bzw. die Namensgebung der Moduln. Die originalen C - Aufrufe benutzen z.B. einen Unterstrich ( ), den es jedoch im damaligen Modula - Standard nach Wirth nicht gab. Und es gab Compiler, die erlaubten trotzdem einen Unterstrich, andere jedoch hielten sich an Wirth. Nachdem der Grundstein für ”crystal“ gelegt worden war, hat es daher noch einige Zeit gedauert, bis das Konzept von ”crystal“ klar war.

1.3 Das Konzept von ”crystal“

Die Namensgebung bei ”crystal“ ergibt sich aus dem jeweiligen C - Bezeichner, aus dem die Unterstriche entfernt werden, bei dem die im Bezeichner enthaltenen Abkürzungen nach Modula - Manier, sprich in Groß-/ Kleinschreibung ausgeschrieben werden und dann unter Beibehaltung der Groß-/ Kleinschreibung wieder zurückgekürzt werden. Zur Verdeutlichung dient ein Beispiel:

1. graf mkstate

2. grafmkstate

3. GraficsManagerMouseAndKeyboardState

4. GrafMKState

Diese Vorgehensweise erscheint nicht unbedingt naheliegend, stellt jedoch eine Möglichkeit dar, aus einem ”C - Look“ einen ”Modula - Look“ zu machen, ohne auf die aus der Literatur geläufigen ”Buchstabenfolgen“ verzichten zu müssen und dabei noch die Compiler, die (noch) keinen Unterstrich zulassen, zu berücksichtigen. Soweit Namen für Typen vergeben werden mußten, die in den C - Bindings dank des spartanischen Typenkonzepts von C nicht vorgesehen waren, wurden keine neuen, künstlichen C -Namen erfunden, sondern ”Modula - like“ Namen gewählt. Diese Namen stellen wohl die eigentliche Schwierigkeit beim Umstieg von anderen Bibliotheken auf ”crystal“ dar.

2 Übersetzen von ”crystal“

2.1 Arbeiten mit dem Präprozessor

Was der Programmiersprache C zur Portabilität verhilft, nämlich der C - Präprozessor, verhilft auch Modula - 2 – insbesondere bei systemnahen Dingen wie GEM – zur Portabilität. Viele Unterschiede zwischen den verschiedenen Modula - Compilern (wie auch bei C - Systemen) können abgefangen werden. Es wurde jedoch Wert darauf gelegt, den Präprozessor - Code umso mehr zu verringern, je höher ein Modul über der GEM - Systemebene angesiedelt ist. Hauptmoduln wie die beiliegenden Testprogramme kommen völlig ohne Präprozessor aus, desweiteren auch viele auf den GEM - Aufrufen aufbauende, höhere Moduln. Dort markiert der Präprozessor u.U. nur noch das Datum und trägt die Compileroptionen ein. Legen Sie von den unter Verwendung des C -Präprocessors - Codes erstellten Quelltexten aus dem Verzeichnis ...\src Kopien an. Diese Kopien übersetzen Sie dann mit einem Shell -Script, daß z.B. wie folgt lautet (vgl.

...\bin\mupfel\c.mup):
echo cpp $1 für $2...
cpp ~$1 -D$2 -P -imacros C:\USR\INCLUDE\CRYSTAL.M2H > temp
x2d1 <temp >$1
rm temp

Ein Aufruf dieses Shell -Scripts kann z.B.

c aes.mod HM2

lauten. Dabei ist aes.mod in diesem Beispiel der Name des Quelltextes, HM2 eine Abkürzung für einen ganz bestimmten Compiler, s. Liste der Modula - Compiler. cpp ist der C - Präprozessor. Er sollte in einem Verzeichnis abgelegt sein, in dem er auch von der verwendeten Shell gefunden wird. Das gleiche gilt für das Script. Meist ist ein solches Verzeichnis in der Environmentvariablen PATH= aufgelistet. Mit Hilfe der Option -D wird die an das Script übergebene Abkürzung als Präprozessor - Konstante definiert. Die Option -P unterdrückt unerwünschte Kommentare im Output des Präprozessors, die Option -imacros lädt ein Includefile schon beim Aufruf des Präprozessors. Der Name des Verzeichnisses, in dem das Includefile crystal.m2h abgelegt ist, ist natürlich an Ihre eigenen Verhältnisse anzupassen. x2d1 ist ein Beautifier, der Zeilenenden mit CR LF abschließt und überflüssige Leerzeilen entfernt. Er sollte ebenfalls in einem Verzeichnis liegen, in dem er von der verwendeten Shell gefunden wird. Um sämtliche Moduln mit dem Präprozessor zu bearbeiten, benutzen Sie am besten das Script ...\bin\c_all.mup, das Sie z.B. wie folgt aufrufen:

c_all HM2

Dieses Script geht davon aus, daß zum aktuellen Verzeichnis die Unterverzeichnisse crystal und toolbox existieren. Weiterhin wird davon ausgegangen, daß sich z.B. auch die Dateien flyinglo.* aus ...\src\flying im Verzeichnis toolbox befinden. Passen Sie daher dieses Script an Ihre Verhältnisse und Wünsche an.

2.2 Hinweise zu Compilern

2.2.1 Fitted Software Tools - Modula V 3.1

Die maximale Anzahl der Bezeichner pro Modul, maxIds, und der dafür reservierte Speicherplatz, idSpace, ist doch etwas zu knapp bemessen. Starten Sie daher FSTM2 mit der Batchdatei ...\cmp\fstm2\fstm2.bat. Denken Sie daran, daß eine GEM-Applikation noch etwas DOS-Speicher frei lassen muß. Dies wird z.B. in der Batchdatei ...\cmp\fstm2\fstmake.bat gemacht. Die Anpassung an diesen Compiler ist vorübergehend eingestellt, solange keine Compiler - Version zur Verfügung steht, bei der Prozeduren – wie bei anderen Compilern auch – Sets zurückliefern dürfen.

2.2.2 ana - Modula

Dieser Compiler (V 1.9) verlangt noch nach Exportlisten. Weiterhin unterstützt er keinerlei 16 - Bit - Zahlenoperationen, sondern nur 32 - Bit - Arithmetik. Beide Features wurden eine Zeit lang unterstützt, z.B. durch die Präprozessor - Variable ”export“ (vgl. noch PORTAB.DEF) und ”long“, und es waren portable GEM - Programme lauffähig. Doch mit der Zeit setzte sich die Meinung durch, daß das oft erforderlich Umwandeln von 16 - Bit - GEM - Daten in 32 - Bit - Daten und eventuell wieder zurück zwar portabel, aber untragbar war. Wer will, kann ”crystal“ insoweit ergänzen, daß Quelltexte wieder portabel zu ana - Modula werden. Aber vielleicht gibt es mittlerweile eine neuere Version dieses Compilers?

2.2.3 TopSpeed - Modula V 1.17

Um mit TopSpeed - Modula ein GEM - Programm linken zu können, sind die Hinweise in der Zusatzdokumentation unter dem Punkt ”Controlling the Order of Classes“ zu beachten, d.h. es muß die Datei order.obj hinzugelinkt werden. Zur Erleichterung dient die Batchdatei ...\cmp\tsm2_1\gl.bat. Denken Sie daran, daß eine GEM-Applikation noch etwas DOS-Speicher frei lassen muß. Dies wird ebenfalls exemplarisch in der Batchdatei gl.bat gemacht. Weiterhin ist zu beachten, daß die AES- und VDI-Einsprünge in den Assemblermoduln AESSYS und VDISYS getätigt werden. Sie befinden sich im gleichen Verzeichnis wie gl.bat.

2.2.4 Hänisch - Modula

Im neuesten Hänisch Compiler gibt es bereits BYTESET, LONGSET und VOID als Standardbezeichner. Um einen Konflikt mit dem Modul INTRIN-SIC zu vermeiden, muß HM.ACC gepatcht werden, d.h. ersetzen Sie obige Bezeichner z.B. durch BYTESet, LONGSet und Void.

2.2.5 SPC - Modula

Compilieren Sie

BASEMAKE.CMD
AESMAKE.CMD
VDIMAKE.CMD
TOOLMAKE.CMD

in dieser Reihenfolge.

2.2.6 LPR - Modula

Bei LPR - Modula kommt es beim Compilieren und Linken sowie beim Start des Debuggers und eventuell auch des LPR - Editors zu einem Konflikt zwischen dem bereits vorhandenen AES - Modul und dem AES - Modul von ”crystal“. Entweder Sie verzichten auf den Debugger und ähnliche Programme und verschieben die Original AES - Moduln (AES.SBM und AES.OBM) in ein Verzeichnis, in dem die Dateien vom LPR - System nicht gefunden werden oder Sie müssen das LPR - System patchen, siehe dazu die Datei

...\cmp\lprm2\patches.txt.

Ein Programm, das nur Moduln aus ”crystal“ verwendet, benötigt vom

LPR - System nur GEMX.OBM, SYSTEM.OBM, TERMINAL.OBM und HEAP.OBM.

Mit Hilfe von Dateien, deren Extension auf *.CM? lautet, kann man dem Compiler eine Liste von zu übersetzenden Moduln übergeben. Ändern Sie zu diesem Zweck einfach die Suchmaske der Fileselektorbox bei ”Modul

auswählen“ von *.MOD nach *.CM?, wählen z.B. BASEMAKE.CMP aus und

rufen dann ”übersetzen Ctrl+ü“ auf. Übersetzen Sie

BASEMAKE.CMP
AESMAKE.CMP
VDIMAKE.CMP
TOOLMAKE.CMP

in dieser Reihenfolge. Die Reihenfolge dieser Dateien und auch die darin enthaltene Reihenfolge von Moduln sollte nicht unüberlegt geändert werden, da in diesen Listen die Abhängigkeiten der Moduln berücksichtigt sind. Um den Heap eines LPRM2 - Compilates zu vergrößern, muß der Linker

gepatcht werden. Dazu dient ...\cmp\lprm2\patchlnk\patchlnk.tos.

2.2.7 Modular Software - Modula

Für dieses System existiert nur eine grobe Anpassung, da der Compiler doch sehr viel zu wünschen übrig läßt.

2.2.8 FTL - Modula

Dieser Compiler scheint irgendwie Probleme mit dem Reexport zu haben. Tritt beim Übersetzten eines Implementationsmoduls die Fehlermeldung ”Name mehrfach deklariert“ auf, ist die angebliche Mehrfachdeklaration im zugehörigen Definitionsmodul zu suchen. Bei der Anpassung an diesen Compiler wurde immerhin soweit Sorge getragen, daß sich die Testprogramme Hello und VDITest übersetzen und ausführen lassen.

2.3 Hinweise zu den verschiedenen GEM - Versionen

2.3.1 ATARI - GEM

Das ATARI - GEM wird mittlerweile von ATARI selbst weiterentwickelt. Mit dem Betriebssytem TOS 1.04 kamen die neuen AES - Aufrufe fsel exinput() und wind new. Mit dem neuen MultiTOS werden die AES multitaskingfähig. Die Menü - Bibliothek wird um Popup - und Submenüs erweitert. Es gibt eine Reihe von neuen shel write() - Modi. Nicht zu vergessen ist das ABC -GEM 2.2 der holländischen Firma ABC - Software, welches PC - GEM 2.2 für den ATARI zur Verfügung stellt, incl. einer neuen GEM - Draw - Version, GEM - Paint, GEM - Graph, GEM - Wordchart und einem neuen GEM - Output. Von allen diesen Programmen sind Demo - Versionen erhältlich.

2.3.2 PC - GEM

Die letzten PC - GEM - Versionen machten vor allem durch die im VDI eingebauten Bezierfunktionen, von denen GEM - Artline intensiven Gebrauch machte, von sich reden. Seit GEM 2.x durfte der GEM - Desktop (nicht GEM an sich!) aufgrund eines ungerechten Streites mit Apple nur noch zwei Fenster anbieten.

2.3.3 X/GEM

Dies ist ein Realtime - Multitasking - GEM unter dem Realtime - Multitasking - Operatingsystem FlexOS, beides von DRI. Man bedenke, daß es sehr wenige Realtime - Multitasking - Operatingsysteme gibt (UNIX ist bis auf Spezialversionen nicht echtzeitfähig!). Daher bilden X/GEM und FlexOS ein wirklich sehr exklusives Gespann! Es wird hauptsächlich zu Meß -, Steuer - und Regelzwecken eingesetzt, z.B. bei Siemens. Rein äußerlich ist X/GEM am ”PC - Look“ zu erkennen, jedoch ohne Einschränkung der Fensterzahl. Jede Applikation erhält einen Desktop in einem Fenster, das in der Größe veränderbar ist. Selbst der Desktop des ”Desktop“ befindet sich in einem Fenster. Darunter befindet sich dann das Nichts, d.h. der blanke Bildschirm. Übrigens gibt es Adimens auch für X/GEM (Adimens GTX). Auf der Programmierebene bietet X/GEM einen erweiterten EvntMulti() - Aufruf: er heißt schlicht EvntEvent() und ist zu EvntMulti() abwärtskompatibel.

FlexOS ist POSIX - orientiert, netzwerkfähig und bietet die Möglichkeit zur Laufzeit Gerätetreiber einzubinden. FlexOS läuft erst ab intel 80286 aufwärts und hat mit DOS nur noch das Dateisystem gemeinsam.

2.3.4 X/GemOnX

Diese GEM - Version stammt nicht von DRI, sondern von der bayrischen Firma X/software . X/GemOnX läuft – der Name läßt es schon vermuten – unter UNIX und X - Windows . X/GemOnX folgt der Server - Client - Architektur. Einer Applikation werden Libraryfunktionen hinzugelinkt, die Befehle und Argumente in Pakete packen, über UNIX - Interprozeß - Kommunikation (UNIX domain sockets oder TCP/IP) an den X/GemOnX - Server senden, Rückgabedaten auspacken und der Applikation zur Verfügung stellen. Daneben gibt es asynchrone Mechanismen für die Events und die user defined objects. Wie bei X - Windows müssen X/GemOnX - Clients und X/GemOnX - Server nicht auf ein und demselben Rechner laufen. Daraus ergibt sich, daß die Resource sich im Adreßraum des X/GemOnX - Servers befindet, also nicht direkt im Speicher der Applikation ansprechbar ist. Solange man als C - Programmierer die Makros aus taddr.h benutzt hat, gibt es keine Probleme beim Portieren. Die wenigsten werden sich daran gehalten haben (C - Programmierer halten C für portabel, programmieren aber zu oft unportable Dinge damit). Bei ”crystal“ ist u.a. deswegen der Zugriff auf AES - Objekte über Funktionen aus den Moduln GetObject und SetObject obligatorisch.

2.4 ”crystal“ und M2POSIX

Das M2POSIX - Paket, erhältlich z.B. von ftp.atari.archive.umich.edu, enthält wie ”crystal“ die Moduln pSTORAGE und PORATB. Diese sollte mit denjenigen von ”crystal“ identisch sein, sodaß man entweder die einen oder die anderen benutzen kann. Im Falle von ATARI - GEM importiert ”crystal“ aus dem M2POSIX - Paket die Funktion DosSystem.GetCookie() sowie einige POSIX - Funktionen für das Modul ScrpMgr.

3 Beschreibung der Moduln

3.1 Namensgebung

Sämtliche AES - Moduln besitzen Namen der Form XXXXMGR.*. Sämtliche VDI - Moduln beginnen mit einem V. Moduln namens XXXXTOOL.* stellen im allgemeinen Erweiterungen zu entsprechenden AES - und VDI - Moduln zur Verfügung.

3.2 Das Modul PORTAB

Dieses systemabhängige Modul stellt Typen zur Verfügung, die jeweils eine bestimmte Anzahl von Bytes belegen sollen um damit Datenstrukturen von fremdem Code, z.B. die AES - und VDI - Eingabearrays, nachbilden zu können. Wichtig ist, daß hier systemabhängige Dinge an zentraler Stelle geändert werden können. Damit wird dem Vorwurf von Prof. Wirth , daß Modula - Programmierer zu oft auf Dinge aus SYSTEM zugreifen, Rechnung getragen. Beispiel für irgendein herausgegriffenes System:

DEFINITION MODULE PORTAB;
IMPORT SYSTEM;
(* fixed Types *)
TYPE UNSIGNEDBYTE = [0..255];
     SIGNEDBYTE   = [-128..127];
     ANYBYTE      = SYSTEM.BYTE;
     UNSIGNEDWORD = SHORTCARD;
     SIGNEDWORD   = SHORTINT;
     ANYWORD      = SYSTEM.WORD;
     UNSIGNEDLONG = CARDINAL;
     SIGNEDLONG   = INTEGER;
     ANYLONG      = SYSTEM.LONGWORD;
     BYTESET = PACKEDSET OF [0..7];

     WORDSET = PACKEDSET OF [0..15];
     LONGSET = PACKEDSET OF [0..31];

(* for open Arrays *)
TYPE ANYTYPE = SYSTEM.LOC;

Je nach Compiler müssen für typfreie, offene Felder BYTE, WORD oder LOC aus SYSTEM importiert werden. Der Typ ANYTYPE stellt eine portablere Möglichkeit dar, derartige Felder zu verwenden.

(* avoiding SYSTEM.ADDRESS *)
TYPE ANYPOINTER = SYSTEM.ADDRESS;

Durch ANYPOINTER macht man sich auch ein kleines bißchen ”SYSTEMunabhängiger“.

(* all Purpose Procedure Type *)
TYPE ANYPROC = PROCEDURE(ANYPOINTER);

ANYPROC stellt den allgemeinsten Fall einer Prozedur dar. Alle Parameter werden durch einen Zeiger auf dieselben übergeben.

(* C-compatible NIL *)
CONST NULL = NIL;

Bei systemnaher Programmierung benötigt man öfters einen Zeiger mit dem Wert 0. Bei vielen Compilern ist dies gleichbedeutend mit NIL, bei einigen jedoch nicht. Aus Gründen der Portabilität benutze man NULL.

3.3 Das Modul pSTORAGE

Leider ist das gewöhnliche Storage - Modul nicht portabel. pSTORAGE schafft Abhilfe.

3.4 Das Modul RcMgr

Dieses Modul stellt tatsächlich einen Ausschnitt aus dem Quelltext der AES dar und ist auch ein Bestandteil (zumindest die GRECT - Struktur und die Funktion rc intersect) von C - Bibliotheken.

3.5 Das Modul SetObject

3.6 Das Modul GetObject

Mit Hilfe dieser beiden Moduln kann auf portable Art und Weise auf die AES - Objektstrukturen zugegriffen werden, selbst wenn man nicht so großen Wert auf Portabilität beispielsweise zu X/GemOnX legt. Zumindest sollte man GetObject.Type() und SetObject.Type() sowie GetObject.Extnd() und SetObject.Extnd() benutzen, da der Zugriff auf den erweiterten Objekttyp von Compiler zu Compiler unterschiedlich sein kann.

3.7 Das Modul MenuTool

Die Funktion MenuKey() behandelt Menü - Tastenkürzel. Die einem Menüpunkt zugeordneten Tastenkürzel, die mit der Control - oder Alternate - Taste gebildet sein müssen, werden aus der Menü - Resource selber ausgelesen. Sie sind somit mit Hilfe eines Resource Construction Sets veränderbar. Die Übersetzung der in der Resource abgelegten Tastenkürzel - Zeichenkette geschieht mit einer Art Tastaturtabelle, die ebenfalls in der Resourcedatei vorhanden sein muß. Die Tastaturtabelle wird an Hand eines speziellen Flag im Root - Objekt erkannt. Diese Tastaturtabelle kann oder muß an die verschiedenen landesspezifischen Tastaturen und Betriebssysteme angepaßt werden.

3.8 Das Modul FormTool

Dieses Modul stellt etwas erweiterte Funktionen zu FormMgr zur Verfügung, insbesondere das Retten des Hintergrundrechtecks von Dialogboxen.

3.9 Das Modul GrafTool

Dieses Modul stellt ein etwas komfortableres GrafMouse() zur Verfügung. Es überwacht die Verschachtelungstiefe und speichert die letzte Mausform.

3.10 Das Modul ObjcTool

Dieses Modul stellt Routinen zur Object - Manipulation zur Verfügung, die über ObjcMgr und SetObject/GetObject hinausgehen.

3.11 Das Modul RsrcTool

Wird dieses Modul importiert, wird RsrcMgr.RsrcLoad() durch eine etwas erweiterte Funktion ersetzt, welche eventuelle Fehlermeldungen in der TOS - Landessprache ausgibt. Die Funktion GetTreePtr() korrigiert einen Mangel der AES, welche zu faul sind, Icons und Images an das physikalische Bildschirmformat anzupassen. Dies ist wichtig bei PC - GEM und Grafikkarten.

3.12 Das Modul AESTool

Dieses Modul ermöglicht die portable Erzeugung sog. user-defined objects.

3.13 Das Modul ApplTool

Dieses Modul stellt die ab MultiTOS vorhandene Funktion ApplGetInfo() zur Verfügung. ApplGetInfo() wurde bewußt nicht in ApplMgr aufgenommen, da die Emulation von ApplGetInfo() sehr viel andere AES - und VDI - Aufrufe benötigt und dies die Modulhierarchie einigermaßen verkomplizieren würde.

4 Liste der Modula - Compiler

Abkürzung Name  Hersteller/Vertrieb
ANAM2  ana Modula/ST  ana systems

P.O. Box 4759 Foster City, CA 94404-0759 USA

CM2  Collier Modula
FSTM2  Fitted Software Modula Fitted Software Tools

P.O. Box 867403 Plano, TX 75086 USA

FTLM2 FTL Modula/ST CCD

Postfach 1164 D-6228 Eltville

GNUM2 GNU-Modula/ST/TT Free Software Foundation, Inc.

675 Mass Ave Cambridge, MA 02139 USA

GPM2  Gardens Point Modula A+L AG

Däderiz 61 CH-2540 Grenchen/SO

HM2  Hänisch Modula/ST/TT MoSys G.b.R.

c/o Thomas Uhl Obere Heerbergstr. 17 D-97078 Würzburg

HSM2  HiSoft Modula  HiSoft
ISOM2  ISO-Modula  -

Abkürzung Name  Hersteller/Vertrieb
JM2  Jefferson Modula  Jefferson Software

12416 North 28th Drive #18-236 Phoenix, AZ 85029-2434 USA

LM2 Logitech Modula Logitech Int. S.A.

CH-1122 Romanel/Morges

LPRM2  LPR Modula  TU München
MM2  Megamax Modula  Application Systems

Heidelberg GmbH Postfach 102646 D-6900 Heidelberg 1

MAMM2 MAMOS Modula  Mammut Software

Pfruendhofstr. 23 CH-8910 Affoltern/Albis

MCSM2 Modula Cross System Beech Tree Systems

Sorpestr. 41 D-5788 Winterberg

MSM2  Modular Software Modula Heim Verlag
ST Modular  Heidelberger Landstr. 194

D-6100 Darmstadt-Eberstadt

RM2 Rowley Modula/ST/TT Rowley Associates

32 Rowley Camp, Dursley Glos. GL11 5NT UK

SBM2  Stony Brook Modula  Stony Brook Software
SDSM2  Software Developing  Interface Technologies
System  Corp.
SPCM2  SPC Modula  Compo Software
TDIM2  TDI Modula  TDI Ltd.

TM2  Taylor Modula  Heynmöller

Informationssysteme GmbH Oxfordstr. 10 D-5300 Bonn 1

TSM2 TopSpeed Modula A+L AG

Däderiz 61

CH-2540 Grenchen/SO

XAM2  ana Modula/UNIX  ana systems, s.o.
XGM2  GNU Modula/UNIX  FSF, s.o.
XGPM2  Gardens Point/UNIX  A+L AG, s.o.
XHM2  Hänisch Modula/UNIX  MoSys G.b.R., s.o.
XRM2  Rowley Modula/UNIX  Rowley Associates, s.o.
CBM2  Cambridge Modula/UNIX University of Cambridge
MWM2  Metrowerks Modula/UNIX Metrowerks, Inc.

The Trimex Building, Rte 11 Mooers, NY 12958 USA

XTM2  Taylor Modula/UNIX  Heynmöller, s.o.
MOCM2  MoCKa/UNIX  GMD

c/o Jürgen Vollmer Vincenz-Prießnitz-Str. 1 D-76131 Karlsruhe 1

5 Literatur

ATARI ST/TT - Profibuch, SYBEX - Verlag GmbH Düsseldorf, ISBN 3-88745-563-0 Obwohl ein ATARI-spezifisches Buch, steht sehr viel Wissenswertes über GEM darin.

Vom Anfänger zum GEM-Profi, Hüthig Verlag Heidelberg, ISBN 3-7785-1792-9 Ein Buch, in dem es nur um GEM geht. Es bietet eine umfangreiche, jedoch leider in C geschriebene, auf GEM aufsetzende Fensterbibliothek. Die Quelltexte warten auf ihre Übertragung nach Modula-2.

GEM Programmier-Handbuch, SYBEX - Verlag GmbH Düsseldorf, ISBN ? Hier wird der Quelltext zu Doodle ausführlich erläutert. Die Autoren sind ehemalige DRI-Mitarbeiter.

Professionell GEM (ProGEM), Antic Publishing Höchst interessante Artikelserie des RCS-Autors Tim Oren. Erhältlich in mehreren Dateien aus verschiedenen öffentlichen Quellen.

X/GemOnX, unix/mail 9/91, S. 36 ff. Ein Artikel, der über X/GemOnX einiges berichtet.

Index

ABC - GEM, 11 Adimens GTX, 11 AESTool, 17 ana - Modula, 8 ANYBYTE, 15 ANYLONG, 15 ANYPOINTER, 15 ANYPROC, 15 ANYTYPE, 15 ANYWORD, 15 Apple, 11 ApplTool, 17 ATARI - GEM, 11

Bildschirmformat, 17 BYTESET, 15

C - Programmierer, 12 Client - Server, 12 cpp, 6

domain sockets, 12 DRI, 11

erweiterter Objekttyp, 16 EvntEvent(), 11 Exportlisten, 8

Fitted Software Tools, 8 FlexOS, 12 FormTool, 16 FTL - Modula, 10

GEM - Wordchart, 11 GetObject, 12, 16 GrafTool, 17 GRECT - Struktur, 16 Hänisch - Modula, 9

Includefile, 6 intel 80286, 12 INTRINSIC, 9

LONGSET, 15 LPR - Modula, 9

M2POSIX, 13 MenuTool, 16 Modula - Compiler, 18 Modular Software - Modula, 10 MultiTOS, 11

Namensgebung, 4

NULL, 15

ObjcTool, 17

patches.txt, 9 patchlnk.tos, 10 PC - GEM, 11 PORTAB, 14 POSIX, 12 Präprozessor, 6 pSTORAGE, 16

RcMgr, 16

Realtime - Multitasking, 11 Reexport, 10 Resource, 12 RsrcTool, 17

Seimet - Verfahren, 3 SetObject, 12, 16 Siemens, 11 SIGNEDBYTE, 15 SIGNEDLONG, 15 SIGNEDWORD, 15

taddr.h, 12 TCP/IP, 12 TopSpeed - Modula V 1.17, 8

UNIX, 11, 12 UNSIGNEDBYTE, 15 UNSIGNEDLONG, 15 UNSIGNEDWORD, 15

Wirth, 14 WORDSET, 15

X - Windows, 12 X/GEM, 11 X/GemOnX, 12 X/software, 12 x2d1, 6